A computer network is a collection of interconnected computing devices that can exchange data and share resources. Example network devices include layer two devices that operate within the second layer of the Open Systems Interconnection (OSI) reference model, i.e., the data link layer, and layer three devices that operate within the third layer of the OSI reference model, i.e., the network layer. Network devices within computer networks often include a control unit that provides control plane functionality for the network device and forwarding components for routing or switching data units. In some cases, for example, a network device may include a plurality of forwarding units (referred to in some examples as packet forwarding engines (PFEs)) and a switch fabric that collectively provide a forwarding plane for forwarding network traffic.
The control plane functions provided by the control unit include storing network topologies in the form of a routing information base (RIB), executing routing protocols to communicate with peer routing devices to maintain and update the RIB, and providing a management interface to allow user access and configuration of the network device. The control unit maintains routing information that represents the overall topology of the network and defines routes to destination prefixes within the network.
The control unit derives a forwarding information base (FIB) that includes a number of forwarding structures generated by the control unit in accordance with the routing information and control information. The control unit installs the forwarding structures within the data plane to programmatically configure the forwarding components. The data and instructions that constitute the forwarding structures define an internal forwarding path for each incoming packet received by the network device. For example, to generate a route table lookup forwarding structure, the control unit selects routes defined by the network topology and maps packet key information (e.g., destination information and other select information from a packet header) to one or more specific next hop network devices and ultimately to one or more specific output interfaces of interface cards of the network device. In some cases, the control unit may install the forwarding structures into each of the PFEs to update the FIB within each of the PFEs and control traffic forwarding within the data plane.
In some examples Virtual Output Queues (VOQs) are used to prevent Head-of-Line blocking at output interfaces. Head-of-Line blocking may occur when a line of packets are delayed because a previously queued packet cannot be forwarded to an output destination. In one example, an egress PFE may include a VOQ for each ingress PFE that forwards packets to the egress PFE. The VOQ for a particular ingress PFE may be a logical queue corresponding to the output queue at the egress PFE. As ingress PFEs forward network packets to the egress PFE, the egress PFE buffers the network packets using the VOQs. The egress PFE may use a shared buffer space for the VOQs to store the network packets until the packets are forwarded to an output destination. Because the VOQs are managed on the egress PFE in such examples, a single ingress PFE may flood the egress PFE with packets thereby using all of the shared buffer space. Consequently, when the egress PFE makes a drop decision, the drop decision is shared across all ingress PFEs regardless of the PFE causing the congestion. In some examples, both the ingress PFE and egress PFE may also each store and read on the respective ingress and egress PFE's buffer space when processing a network packet. For example, store and read operation operations may occur twice when processing each network packet, i.e., once on the ingress buffer space and once on the egress buffer space.